home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / shockab.zip / DEFS.QC < prev    next >
Text File  |  1996-10-13  |  23KB  |  700 lines

  1.  
  2. /*
  3. ==============================================================================
  4.  
  5.             SOURCE FOR GLOBALVARS_T C STRUCTURE
  6.  
  7. ==============================================================================
  8. */
  9.  
  10. //
  11. // system globals
  12. //
  13. entity            self;
  14. entity            other;
  15. entity            world;
  16. float       time;
  17. float       frametime;
  18.  
  19. float       force_retouch;          // force all entities to touch triggers
  20.                                 // next frame.  this is needed because
  21.                                 // non-moving things don't normally scan
  22.                                 // for triggers, and when a trigger is
  23.                                 // created (like a teleport trigger), it
  24.                                 // needs to catch everything.
  25.                                 // decremented each frame, so set to 2
  26.                                 // to guarantee everything is touched
  27. string            mapname;
  28.  
  29. float       deathmatch;
  30. float       coop;
  31. float       teamplay;
  32.  
  33. float       serverflags;            // propagated from level to level, used to
  34.                                 // keep track of completed episodes
  35.  
  36. float       total_secrets;
  37. float       total_monsters;
  38.  
  39. float       found_secrets;          // number of secrets found
  40. float       killed_monsters;  // number of monsters killed
  41.  
  42.  
  43. // spawnparms are used to encode information about clients across server
  44. // level changes
  45. float       parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, parm9, parm10, parm11, parm12, parm13, parm14, parm15, parm16;
  46.  
  47. //
  48. // global variables set by built in functions
  49. //    
  50. vector            v_forward, v_up, v_right;     // set by makevectors()
  51.     
  52. // set by traceline / tracebox
  53. float       trace_allsolid;
  54. float       trace_startsolid;
  55. float       trace_fraction;
  56. vector            trace_endpos;
  57. vector            trace_plane_normal;
  58. float       trace_plane_dist;
  59. entity            trace_ent;
  60. float       trace_inopen;
  61. float       trace_inwater;
  62.  
  63. entity            msg_entity;                   // destination of single entity writes
  64.  
  65. //
  66. // required prog functions
  67. //
  68. void()            main;                               // only for testing
  69.  
  70. void()            StartFrame;
  71.  
  72. void()            PlayerPreThink;
  73. void()            PlayerPostThink;
  74.  
  75. void()            ClientKill;
  76. void()            ClientConnect;
  77. void()            PutClientInServer;            // call after setting the parm1... parms
  78. void()            ClientDisconnect;
  79.  
  80. void()            SetNewParms;                  // called when a client first connects to
  81.                                     // a server. sets parms so they can be
  82.                                     // saved off for restarts
  83.  
  84. void()            SetChangeParms;               // call to set parms for self so they can
  85.                                     // be saved for a level transition
  86.  
  87.  
  88. //================================================
  89. void        end_sys_globals;        // flag for structure dumping
  90. //================================================
  91.  
  92. /*
  93. ==============================================================================
  94.  
  95.             SOURCE FOR ENTVARS_T C STRUCTURE
  96.  
  97. ==============================================================================
  98. */
  99.  
  100. //
  101. // system fields (*** = do not set in prog code, maintained by C code)
  102. //
  103. .float            modelindex;       // *** model index in the precached list
  104. .vector           absmin, absmax;   // *** origin + mins / maxs
  105.  
  106. .float            ltime;                  // local time for entity
  107. .float            movetype;
  108. .float            solid;
  109.  
  110. .vector           origin;                 // ***
  111. .vector           oldorigin;        // ***
  112. .vector           velocity;
  113. .vector           angles;
  114. .vector           avelocity;
  115.  
  116. .vector           punchangle;       // temp angle adjust from damage or recoil
  117.  
  118. .string           classname;        // spawn function
  119. .string           model;
  120. .float            frame;
  121. .float            skin;
  122. .float            effects;
  123.  
  124. .vector           mins, maxs;       // bounding box extents reletive to origin
  125. .vector           size;             // maxs - mins
  126.  
  127. .void()           touch;
  128. .void()           use;
  129. .void()           think;
  130. .void()           blocked;          // for doors or plats, called when can't push other
  131.  
  132. .float            nextthink;
  133. .entity           groundentity;
  134.  
  135. // stats
  136. .float            health;
  137. .float            frags;
  138. .float            weapon;                 // one of the IT_SHOTGUN, etc flags
  139. .string           weaponmodel;
  140. .float            weaponframe;
  141. .float            currentammo;
  142. .float            ammo_shells, ammo_nails, ammo_rockets, ammo_cells;
  143.  
  144. .float            items;                  // bit flags
  145.  
  146. .float            takedamage;
  147. .entity           chain;
  148. .float            deadflag;
  149.  
  150. .vector           view_ofs;               // add to origin to get eye point
  151.  
  152.  
  153. .float            button0;          // fire
  154. .float            button1;          // use
  155. .float            button2;          // jump
  156.  
  157. .float            impulse;          // weapon changes
  158.  
  159. .float            fixangle;
  160. .vector           v_angle;          // view / targeting angle for players
  161. .float            idealpitch;       // calculated pitch angle for lookup up slopes
  162.  
  163.  
  164. .string           netname;
  165.  
  166. .entity     enemy;
  167.  
  168. .float            flags;
  169.  
  170. .float            colormap;
  171. .float            team;
  172.  
  173. .float            max_health;       // players maximum health is stored here
  174.  
  175. .float            teleport_time;    // don't back up
  176.  
  177. .float            armortype;        // save this fraction of incoming damage
  178. .float            armorvalue;
  179.  
  180. .float            waterlevel;       // 0 = not in, 1 = feet, 2 = wast, 3 = eyes
  181. .float            watertype;        // a contents value
  182.  
  183. .float            ideal_yaw;
  184. .float            yaw_speed;
  185.  
  186. .entity           aiment;
  187.  
  188. .entity     goalentity;       // a movetarget or an enemy
  189.  
  190. .float            spawnflags;
  191.  
  192. .string           target;
  193. .string           targetname;
  194.  
  195. // damage is accumulated through a frame. and sent as one single
  196. // message, so the super shotgun doesn't generate huge messages
  197. .float            dmg_take;
  198. .float            dmg_save;
  199. .entity           dmg_inflictor;
  200.  
  201. .entity           owner;            // who launched a missile
  202. .vector           movedir;    // mostly for doors, but also used for waterjump
  203.  
  204. .string           message;          // trigger messages
  205.  
  206. .float            sounds;           // either a cd track number or sound number
  207.  
  208. .string           noise, noise1, noise2, noise3;      // contains names of wavs to play
  209.  
  210. //================================================
  211. void        end_sys_fields;               // flag for structure dumping
  212. //================================================
  213.  
  214. /*
  215. ==============================================================================
  216.  
  217.                 VARS NOT REFERENCED BY C CODE
  218.  
  219. ==============================================================================
  220. */
  221.  
  222.  
  223. //
  224. // constants
  225. //
  226.  
  227. float FALSE                         = 0;
  228. float       TRUE                          = 1;
  229.  
  230. // edict.flags
  231. float FL_FLY                              = 1;
  232. float FL_SWIM                             = 2;
  233. float FL_CLIENT                     = 8;  // set for all client edicts
  234. float FL_INWATER                    = 16; // for enter / leave water splash
  235. float FL_MONSTER                    = 32;
  236. float FL_GODMODE                    = 64; // player cheat
  237. float FL_NOTARGET                   = 128;      // player cheat
  238. float FL_ITEM                             = 256;      // extra wide size for bonus items
  239. float FL_ONGROUND                   = 512;      // standing on something
  240. float FL_PARTIALGROUND        = 1024;     // not all corners are valid
  241. float FL_WATERJUMP                  = 2048;     // player jumping out of water
  242. float FL_JUMPRELEASED               = 4096;     // for jump debouncing
  243.  
  244. // edict.movetype values
  245. float MOVETYPE_NONE                 = 0;  // never moves
  246. //float     MOVETYPE_ANGLENOCLIP    = 1;
  247. //float     MOVETYPE_ANGLECLIP            = 2;
  248. float MOVETYPE_WALK                 = 3;  // players only
  249. float MOVETYPE_STEP                 = 4;  // discrete, not real time unless fall
  250. float MOVETYPE_FLY                  = 5;
  251. float MOVETYPE_TOSS                 = 6;  // gravity
  252. float MOVETYPE_PUSH                 = 7;  // no clip to world, push and crush
  253. float MOVETYPE_NOCLIP               = 8;
  254. float MOVETYPE_FLYMISSILE           = 9;  // fly with extra size against monsters
  255. float MOVETYPE_BOUNCE               = 10;
  256. float MOVETYPE_BOUNCEMISSILE  = 11; // bounce with extra size
  257.  
  258. // edict.solid values
  259. float SOLID_NOT                     = 0;  // no interaction with other objects
  260. float SOLID_TRIGGER                 = 1;  // touch on edge, but not blocking
  261. float SOLID_BBOX                    = 2;  // touch on edge, block
  262. float SOLID_SLIDEBOX                = 3;  // touch on edge, but not an onground
  263. float SOLID_BSP                     = 4;  // bsp clip, touch on edge, block
  264.  
  265. // range values
  266. float RANGE_MELEE                   = 0;
  267. float RANGE_NEAR                    = 1;
  268. float RANGE_MID                     = 2;
  269. float RANGE_FAR                     = 3;
  270.  
  271. // deadflag values
  272.  
  273. float DEAD_NO                             = 0;
  274. float DEAD_DYING                    = 1;
  275. float DEAD_DEAD                     = 2;
  276. float DEAD_RESPAWNABLE        = 3;
  277.  
  278. // takedamage values
  279.  
  280. float DAMAGE_NO                     = 0;
  281. float DAMAGE_YES                    = 1;
  282. float DAMAGE_AIM                    = 2;
  283.  
  284. // items
  285. float IT_AXE                              = 4096;
  286. float IT_SHOTGUN                    = 1;
  287. float IT_SUPER_SHOTGUN        = 2;
  288. float IT_NAILGUN                    = 4;
  289. float IT_SUPER_NAILGUN        = 8;
  290. float IT_GRENADE_LAUNCHER           = 16;
  291. float IT_ROCKET_LAUNCHER            = 32;
  292. float IT_LIGHTNING                  = 64;
  293. float IT_EXTRA_WEAPON               = 128;
  294.  
  295. float IT_SHELLS                     = 256;
  296. float IT_NAILS                      = 512;
  297. float IT_ROCKETS                    = 1024;
  298. float IT_CELLS                      = 2048;
  299.  
  300. float IT_ARMOR1                     = 8192;
  301. float IT_ARMOR2                     = 16384;
  302. float IT_ARMOR3                     = 32768;
  303. float IT_SUPERHEALTH                = 65536;
  304.  
  305. float IT_KEY1                             = 131072;
  306. float IT_KEY2                             = 262144;
  307.  
  308. float IT_INVISIBILITY               = 524288;
  309. float IT_INVULNERABILITY            = 1048576;
  310. float IT_SUIT                             = 2097152;
  311. float IT_QUAD                             = 4194304;
  312.  
  313. // point content values
  314.  
  315. float CONTENT_EMPTY                 = -1;
  316. float CONTENT_SOLID                 = -2;
  317. float CONTENT_WATER                 = -3;
  318. float CONTENT_SLIME                 = -4;
  319. float CONTENT_LAVA                  = -5;
  320. float CONTENT_SKY                   = -6;
  321.  
  322. float STATE_TOP         = 0;
  323. float STATE_BOTTOM      = 1;
  324. float STATE_UP          = 2;
  325. float STATE_DOWN        = 3;
  326.  
  327. vector      VEC_ORIGIN = '0 0 0';
  328. vector      VEC_HULL_MIN = '-16 -16 -24';
  329. vector      VEC_HULL_MAX = '16 16 32';
  330.  
  331. vector      VEC_HULL2_MIN = '-32 -32 -24';
  332. vector      VEC_HULL2_MAX = '32 32 64';
  333.  
  334. // protocol bytes
  335. float SVC_TEMPENTITY          = 23;
  336. float SVC_KILLEDMONSTER = 27;
  337. float SVC_FOUNDSECRET         = 28;
  338. float SVC_INTERMISSION  = 30;
  339. float SVC_FINALE              = 31;
  340. float SVC_CDTRACK             = 32;
  341. float SVC_SELLSCREEN          = 33;
  342.  
  343.  
  344. float TE_SPIKE          = 0;
  345. float TE_SUPERSPIKE     = 1;
  346. float TE_GUNSHOT        = 2;
  347. float TE_EXPLOSION      = 3;
  348. float TE_TAREXPLOSION   = 4;
  349. float TE_LIGHTNING1     = 5;
  350. float TE_LIGHTNING2     = 6;
  351. float TE_WIZSPIKE       = 7;
  352. float TE_KNIGHTSPIKE    = 8;
  353. float TE_LIGHTNING3     = 9;
  354. float TE_LAVASPLASH     = 10;
  355. float TE_TELEPORT       = 11;
  356.  
  357. // sound channels
  358. // channel 0 never willingly overrides
  359. // other channels (1-7) allways override a playing sound on that channel
  360. float CHAN_AUTO         = 0;
  361. float CHAN_WEAPON       = 1;
  362. float CHAN_VOICE        = 2;
  363. float CHAN_ITEM         = 3;
  364. float CHAN_BODY         = 4;
  365.  
  366. float ATTN_NONE         = 0;
  367. float ATTN_NORM         = 1;
  368. float ATTN_IDLE         = 2;
  369. float ATTN_STATIC       = 3;
  370.  
  371. // update types
  372.  
  373. float UPDATE_GENERAL    = 0;
  374. float UPDATE_STATIC     = 1;
  375. float UPDATE_BINARY     = 2;
  376. float UPDATE_TEMP       = 3;
  377.  
  378. // entity effects
  379.  
  380. float EF_BRIGHTFIELD    = 1;
  381. float EF_MUZZLEFLASH    = 2;
  382. float EF_BRIGHTLIGHT    = 4;
  383. float EF_DIMLIGHT       = 8;
  384.  
  385.  
  386. // messages
  387. float MSG_BROADCAST     = 0;        // unreliable to all
  388. float MSG_ONE                 = 1;        // reliable to one (msg_entity)
  389. float MSG_ALL                 = 2;        // reliable to all
  390. float MSG_INIT          = 3;        // write to the init string
  391.  
  392. //================================================
  393.  
  394. //
  395. // globals
  396. //
  397. float movedist;
  398. float gameover;         // set when a rule exits
  399.  
  400. string      string_null;      // null string, nothing should be held here
  401. float empty_float;
  402.  
  403. entity      newmis;                 // launch_spike sets this after spawning it
  404.  
  405. entity      activator;        // the entity that activated a trigger or brush
  406.  
  407. entity      damage_attacker;  // set by T_Damage
  408. float framecount;
  409.  
  410. float       skill;
  411.  
  412. //================================================
  413.  
  414. //
  415. // world fields (FIXME: make globals)
  416. //
  417. .string           wad;
  418. .string     map;
  419. .float            worldtype;  // 0=medieval 1=metal 2=base
  420.  
  421. //================================================
  422.  
  423. .string           killtarget;
  424.  
  425. //
  426. // quakeed fields
  427. //
  428. .float            light_lev;        // not used by game, but parsed by light util
  429. .float            style;
  430.  
  431.  
  432. //
  433. // monster ai
  434. //
  435. .void()           th_stand;
  436. .void()           th_walk;
  437. .void()           th_run;
  438. .void()           th_missile;
  439. .void()           th_melee;
  440. .void(entity attacker, float damage)            th_pain;
  441. .void()           th_die;
  442.  
  443. .entity           oldenemy;         // mad at this player before taking damage
  444.  
  445. .float            speed;
  446.  
  447. .float      lefty;
  448.  
  449. .float      search_time;
  450. .float      attack_state;
  451.  
  452. .float      InitialVelocity;
  453. .float      CanBeShocked;
  454.  
  455. float AS_STRAIGHT       = 1;
  456. float AS_SLIDING        = 2;
  457. float AS_MELEE          = 3;
  458. float AS_MISSILE        = 4;
  459.  
  460. //
  461. // player only fields
  462. //
  463.  
  464. .float            Shocka_Gun_Active;
  465.  
  466. .float            walkframe;
  467.  
  468. .float            attack_finished;
  469. .float            pain_finished;
  470.  
  471. .float            invincible_finished;
  472. .float            invisible_finished;
  473. .float            super_damage_finished;
  474. .float            radsuit_finished;
  475.  
  476. .float            invincible_time, invincible_sound;
  477. .float            invisible_time, invisible_sound;
  478. .float            super_time, super_sound;
  479. .float            rad_time;
  480. .float            fly_sound;
  481.  
  482. .float            axhitme;
  483.  
  484. .float            show_hostile;     // set to time+0.2 whenever a client fires a
  485.                             // weapon or takes damage.  Used to alert
  486.                             // monsters that otherwise would let the player go
  487. .float            jump_flag;        // player jump flag
  488. .float            swim_flag;        // player swimming sound flag
  489. .float            air_finished;     // when time > air_finished, start drowning
  490. .float            bubble_count;     // keeps track of the number of bubbles
  491. .string           deathtype;        // keeps track of how the player died
  492.  
  493. //
  494. // object stuff
  495. //
  496. .string           mdl;
  497. .vector           mangle;                 // angle at start
  498.  
  499. .vector           oldorigin;        // only used by secret door
  500.  
  501. .float            t_length, t_width;
  502.  
  503.  
  504. //
  505. // doors, etc
  506. //
  507. .vector           dest, dest1, dest2;
  508. .float            wait;             // time from firing to restarting
  509. .float            delay;                  // time from activation to firing
  510. .entity           trigger_field;    // door's trigger entity
  511. .string           noise4;
  512.  
  513. //
  514. // monsters
  515. //
  516. .float            pausetime;
  517. .entity     movetarget;
  518.  
  519.  
  520. //
  521. // doors
  522. //
  523. .float            aflag;
  524. .float            dmg;              // damage done by door when hit
  525.     
  526. //
  527. // misc
  528. //
  529. .float            cnt;              // misc flag
  530.     
  531. //
  532. // subs
  533. //
  534. .void()           think1;
  535. .vector           finaldest, finalangle;
  536.  
  537. //
  538. // triggers
  539. //
  540. .float            count;                  // for counting triggers
  541.  
  542.  
  543. //
  544. // plats / doors / buttons
  545. //
  546. .float            lip;
  547. .float            state;
  548. .vector           pos1, pos2;       // top and bottom positions
  549. .float            height;
  550.  
  551. //
  552. // sounds
  553. //
  554. .float            waitmin, waitmax;
  555. .float            distance;
  556. .float            volume;
  557.  
  558.  
  559.  
  560.  
  561. //===========================================================================
  562.     
  563.  
  564. //
  565. // builtin functions
  566. //
  567.  
  568. void(vector ang)  makevectors       = #1;       // sets v_forward, etc globals
  569. void(entity e, vector o) setorigin  = #2;
  570. void(entity e, string m) setmodel   = #3;       // set movetype and solid first
  571. void(entity e, vector min, vector max) setsize = #4;
  572. // #5 was removed
  573. void() break                                    = #6;
  574. float() random                                  = #7;       // returns 0 - 1
  575. void(entity e, float chan, string samp, float vol, float atten) sound = #8;
  576. vector(vector v) normalize                = #9;
  577. void(string e) error                      = #10;
  578. void(string e) objerror                   = #11;
  579. float(vector v) vlen                      = #12;
  580. float(vector v) vectoyaw                  = #13;
  581. entity() spawn                                  = #14;
  582. void(entity e) remove                     = #15;
  583.  
  584. // sets trace_* globals
  585. // nomonsters can be:
  586. // An entity will also be ignored for testing if forent == test,
  587. // forent->owner == test, or test->owner == forent
  588. // a forent of world is ignored
  589. void(vector v1, vector v2, float nomonsters, entity forent) traceline = #16;  
  590.  
  591. entity() checkclient                      = #17;      // returns a client to look for
  592. entity(entity start, .string fld, string match) find = #18;
  593. string(string s) precache_sound           = #19;
  594. string(string s) precache_model           = #20;
  595. void(entity client, string s)stuffcmd = #21;
  596. entity(vector org, float rad) findradius = #22;
  597. void(string s) bprint                     = #23;
  598. void(entity client, string s) sprint = #24;
  599. void(string s) dprint                     = #25;
  600. string(float f) ftos                      = #26;
  601. string(vector v) vtos                     = #27;
  602. void() coredump                                 = #28;            // prints all edicts
  603. void() traceon                                  = #29;            // turns statment trace on
  604. void() traceoff                                 = #30;
  605. void(entity e) eprint                     = #31;            // prints an entire edict
  606. float(float yaw, float dist) walkmove     = #32;      // returns TRUE or FALSE
  607. // #33 was removed
  608. float(float yaw, float dist) droptofloor= #34;  // TRUE if landed on floor
  609. void(float style, string value) lightstyle = #35;
  610. float(float v) rint                             = #36;            // round to nearest int
  611. float(float v) floor                      = #37;            // largest integer <= v
  612. float(float v) ceil                             = #38;            // smallest integer >= v
  613. // #39 was removed
  614. float(entity e) checkbottom               = #40;            // true if self is on ground
  615. float(vector v) pointcontents       = #41;            // returns a CONTENT_*
  616. // #42 was removed
  617. float(float f) fabs = #43;
  618. vector(entity e, float speed) aim = #44;        // returns the shooting vector
  619. float(string s) cvar = #45;                                 // return cvar.value
  620. void(string s) localcmd = #46;                              // put string into local que
  621. entity(entity e) nextent = #47;                             // for looping through all ents
  622. void(vector o, vector d, float color, float count) particle = #48;// start a particle effect
  623. void() ChangeYaw = #49;                               // turn towards self.ideal_yaw
  624.                                             // at self.yaw_speed
  625. // #50 was removed
  626. vector(vector v) vectoangles              = #51;
  627.  
  628. //
  629. // direct client message generation
  630. //
  631. void(float to, float f) WriteByte         = #52;
  632. void(float to, float f) WriteChar         = #53;
  633. void(float to, float f) WriteShort        = #54;
  634. void(float to, float f) WriteLong         = #55;
  635. void(float to, float f) WriteCoord        = #56;
  636. void(float to, float f) WriteAngle        = #57;
  637. void(float to, string s) WriteString      = #58;
  638. void(float to, entity s) WriteEntity      = #59;
  639.  
  640. //
  641. // broadcast client message generation
  642. //
  643.  
  644. // void(float f) bWriteByte         = #59;
  645. // void(float f) bWriteChar         = #60;
  646. // void(float f) bWriteShort        = #61;
  647. // void(float f) bWriteLong         = #62;
  648. // void(float f) bWriteCoord        = #63;
  649. // void(float f) bWriteAngle        = #64;
  650. // void(string s) bWriteString      = #65;
  651. // void(entity e) bWriteEntity = #66;
  652.  
  653. void(float step) movetogoal                     = #67;
  654.  
  655. string(string s) precache_file            = #68;      // no effect except for -copy
  656. void(entity e) makestatic           = #69;
  657. void(string s) changelevel = #70;
  658.  
  659. //#71 was removed
  660.  
  661. void(string var, string val) cvar_set = #72;    // sets cvar.value
  662.  
  663. void(entity client, string s) centerprint = #73;      // sprint, but in middle
  664.  
  665. void(vector pos, string samp, float vol, float atten) ambientsound = #74;
  666.  
  667. string(string s) precache_model2    = #75;            // registered version only
  668. string(string s) precache_sound2    = #76;            // registered version only
  669. string(string s) precache_file2           = #77;            // registered version only
  670.  
  671. void(entity e) setspawnparms        = #78;            // set parm1... to the
  672.                                                 // values at level start
  673.                                                 // for coop respawn
  674.  
  675. //============================================================================
  676.  
  677. //
  678. // subs.qc
  679. //
  680. void(vector tdest, float tspeed, void() func) SUB_CalcMove;
  681. void(entity ent, vector tdest, float tspeed, void() func) SUB_CalcMoveEnt;
  682. void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove;
  683. void()  SUB_CalcMoveDone;
  684. void() SUB_CalcAngleMoveDone;
  685. void() SUB_Null;
  686. void() SUB_UseTargets;
  687. void() SUB_Remove;
  688.  
  689. //
  690. //    combat.qc
  691. //
  692. void(entity targ, entity inflictor, entity attacker, float damage) T_Damage;
  693.  
  694.  
  695. float (entity e, float healamount, float ignore) T_Heal; // health function
  696.  
  697. float(entity targ, entity inflictor) CanDamage;
  698.  
  699.  
  700.